Many modern programming languages support the concept of types. A type usually is statically assigned to some programming construct when source code that implements a programming construct is translated by a compiler into an executable computer program, that is, at compile time. This procedure is often called early binding. Alternatively, a type often can be late bound or assigned once enough information about the programming construct is known to be able to derive or deduce the appropriate type for that programming construct. Some high-level programming languages, along with compilers that support those languages, can support both early and late bindings.
Computing systems increasingly must work with data from diverse sources. Often the data with which these systems must work is in a variety of different formats and representations. Each of these formats and representations has its own strengths and weaknesses. Choice among formats is a common problem encountered by software developers.
Among the most popular of formats for data are formats based upon a relational data model. This model is commonly applied in relational databases that often allow queries of stored data using an implementation of a relational calculus. Query results often imply a projection of members of various source values into a new target value. Software developers often find it inconvenient or impractical to project into a named or nominal type. Current systems commonly require use of named or nominal types and fail to provide an effective alternative to ease programming burdens for software developers.